package com.zhangyue.wqercs.recyclerviewdemo;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;

class MyItemTouchHelperCallback extends ItemTouchHelper.Callback {

    //这是自定义的Listener对象，为了和RecyclerView的adapter进行通信。
    //本类只是辅助RecyclerView处理事件，而数据处理还是在Adapter中，所以需要这个接口
    private final OnItemChangeListener listener;

    public MyItemTouchHelperCallback(OnItemChangeListener listener){
        this.listener = listener;
    }
    
    //是否能够拖拽还是侧滑
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView,
                                @NonNull RecyclerView.ViewHolder viewHolder) {
        //设置标记。第一个参数代表拖拽，第二个参数代表是否可以在item中滑动
        //比如本Demo中，实现的是一个item可以上下拖动功能，所以我的拖拽方向是上下左右，而不能滑动
        return makeMovementFlags(ItemTouchHelper.UP|ItemTouchHelper.DOWN
                |ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT,0);
    }

    //上下移动标记
    //param1 RecyclerView控件
    //param2 正在移动的item的Holder（holder可以理解为item）
    //param3 移动“到”的item的Holder
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView,
                          @NonNull RecyclerView.ViewHolder viewHolder,
                          @NonNull RecyclerView.ViewHolder viewHolder1) {
        if(listener != null){
            //通过自定义的listener将得到的数据传递到adapter中，所以adapter将获得移动的数据
            //这里是将“从Item的位置到另一个Item的位置”
            listener.change(viewHolder.getAdapterPosition(),
                    viewHolder1.getAdapterPosition());
        }
        return true;
    }

    //只有长按之后我们的onMove方法才会执行.
    //源码中显示长按会改变item的actionState。而move方法会判断actionState
    @Override
    public boolean isLongPressDragEnabled() {
        return true;
    }

    //侧滑标记
    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

    }
}
